## Оператор `if` и организация ветвления в Си

`2024.05.15`

```C
if (condition)
    // operator #1;
else
    // operator #2;
```

Условие в блоке ИФ является арифметическим (0 или все другие цифры), а не логическим

Неполная форма оператора ИФ

```C
// сверка условия будет выполнена по-любому 
if (condition)
    // operator #1;
```

Есть вариант построения логики программы с ветвлением (сначала ветвятся, а потом приходят к одному)

Другой вариант – «отщипывать» варианты по одному. «Каскадное» ветвление

```C
if (condition1) {
    action1;
} else if (condition2) {
    action2;
} else {
    action3;        
}   
```

При бинарном вложенном ветвлении скорость выполнения программы выше. Одноуровневое ветвление (много иф-елсиф) является предпочтительным, но проигрывает в скорости

---

## Метки, оператор `goto` и оператор `switch`

`2024.05.15`

Оператор ГОТО пришел в ЯП из машинного кода

Аргументы против ГОТО:

1. Плохой тон

2. Нечитабельность кода

3. Заменим циклами и ветвлением

4. Мешает оптимизации компилятором

5. Эдсгер Дейкстра против

Компилятор не просто переводит механически код в машинный код. Он еще и оптимизирует код. Но этой оптимизации будет значительно меньше, если в коде будет использован оператор ГОТО

При программировании `конечного автомата` ГОТО бывает удобен. Но есть и другие способы запрограммировать конечный автомат без ГОТО

```C
int main(void) {
    int x;

A:  scanf("%d", &x);
    if (x == 0) goto D;
B:  if (x%2 != 0) goto C;
    printf("Number %d is even.\n", x);
    goto A;
C:  printf("Number %d is odd.\n", x);
    goto A;
D:
    return 0;
```

**Оператор СВИТЧ** – оператор ветвления (кейс, дифолт)

!! РАБОТАЕТ ТОЛЬКО ДЛЯ ЦЕЛЫХ ЧИСЕЛ!!

```C
switch(x) {
case 1:
    printf("One"); break;   // если одной действие – то можно записать брейк с действием в одной строке
case 2:
    printf("Two");          // но лучше так
    break;
case 0:
    printf("Zero");
    break;
default:
    printf("n/a");
    break;
};                          // !!здесь точка с запятой – обязательна!!
```

Свитчи внутри реализованы через ГОТО. Кейсы ГОТО – суть метки
